/**
 * @Auther: MFM
 * @Date: 2022/3/14 - 03 - 14 - 17:22
 * @version: 1.0
 */

public class ArrayQueueDemo<E> implements Queue<E>{
    /*
     * 队列
     * 只能从一端进从另一端出
     * 先进先出
     *
     * 方法；入队 void enqueue(E)
     *       出队  E dequeue()
     *       查看队首元素  E getFront()
     *       查看对内元素数量 int getSize()
     *       判断对内元素是否为空  boolean isEmpty()
     *
     * 扩充：如果对空队进行出队 称为 队列下溢
     *       如果size>capacity 称为 队列下溢
     * */

    private ArrayDemo<E> array;

    //构造函数默认capacity为10
    public ArrayQueueDemo() throws Exception{
        array = new ArrayDemo<>(10);
    }

    //构造函数指定capacity
    public ArrayQueueDemo(int capacity) throws Exception{
        array = new ArrayDemo<>(capacity);
    }

    @Override
    public void enqueue(E e) throws Exception {
        array.addFirst(e);
    }

    @Override
    public E dequeue()  throws Exception{
        if (getSize()==0){
            return null;
        }
        return array.deleteData(array.getSize());
    }

    @Override
    public E getFront() throws Exception{
        return array.seeData(0);
    }

    @Override
    public int getSize()  throws Exception{
        return array.getSize();
    }

    @Override
    public boolean isEmpty()  throws Exception{
        return array.getSize()==0;
    }

    @Override
    public String toString() {
        return "ArrayQueueDemo{" +
                "array=" + array +
                '}';
    }
}
